查看原文
其他

开源社区给黑客带来了什么?

开源社 2021-04-22

The following article is from 夜天之书 Author tisonkun

点击上方“开源社”关注我们




| 作者:tisonkun| 转载自:夜天之书| 编辑:黄欣宜| 设计:刘颖洁| 责编:王玥敏
近年来,以阿里巴巴、小米和华为为首的一批公司在开源社区中的活跃,以及在招聘条件上明确加入优先录用具有开源经验的候选人,使得开源软件、开源社区以及具体到个人参与社区的方法和收益成为了业内热议的话题。
我有幸在实习及工作中深度参与到 Apache Flink 社区中,并在社区成长一年之后加入到 Committer 团队里;又在转换到业务为主的工作以后,根据自己的经验和热情成为了 Apache Curator 项目的 Committer 和 PMC 成员。时常有同学问我开源社区该怎么参与,社区和工作之间的平衡应该要怎么做的问题。我虽然算不得经验丰富,有些理解也尚浅薄,但是也确实觉得开源社区对软件开发有实际的好处,值得分享。
这篇文章先简要的回答怎么参与社区的问题,再谈谈开源社区给黑客,也就是热爱代码的开发者们带来了什么。

诚如《社区运营的艺术》一书中所说,开源社区本质上是开发开源软件的人所形成的群体,其主要标志是社区成员在社区中建立的归属感。参与开源社区,本质上是在社区中找到自己的位置,建立自己的归属感,并将自己融入到别人对社区的归属感的定义中去。
因此,参与开源社区的方法,说一千道一万,首要的是建立自己对社区的认同。如果自己都反感某个社区,或者以社区为工具而不是归属,怎么能努力参与其中呢?基于对社区的认同,才能说服自己付出时间和精力获取社区的认同,而社区的认同实际上是一种社交经济。
是的,参与开源社区的要点和参与任何社区的要点一样,最重要的是社区中的社交货币,也就是那些对人们日常生活有重大影响的可感受到的东西。例如信誉、伙伴关系、同情心和成员之间的社会交往。开源社区的参与并不因为它围绕着开源软件展开而有所不同,只是在社交货币的具体表现上体现为以对开源软件的贡献为核心而已。
我在一篇早期的文章《如何参与 Apache 社区》中以交流技巧为开头,以兴趣使然为结尾,就是强调主动和社会交往的重要性。具体的实践技巧非常简单,想想看你要如何参与一次团体游戏或者读书研讨?只要表现出你的兴趣和基础的能力,参与其中并展现自己,为团体做出贡献就可以了。在社区中,这个贡献可以从文档和注释开始,因为这能够帮助你快速的了解社区。尽量不要在一个地方呆着,但是要花主要的时间在一个地方钻研。因为在单点上更容易集中精力做出贡献,积累社交货币,而广泛地交游才能让你把握住社区的走向。主动承担社区 RoadMap 上关键的职责,如果不知道是什么或者怎么做,就去问。这样才能和开源社区一起成长。没有人会拒绝一个能力合格而积极主动的贡献者。
对于工作和社区的所谓平衡问题,我曾说过要写一篇短文来讨论,但是细想之后发现其实一句话就能说清楚。因为根本不存在需要刻意平衡的点。如果你的工作就是运营或者发展开源社区,例如著名社区的主要贡献公司,那么你的工作就是社区工作,并不冲突;如果你的工作建立在开源社区的成果之上的,那将你的工作成果在组织同意的情况下贡献给开源社区,或者解答社区中的问题,都是与工作有益无害的;如果你的工作和开源社区不太搭边,那参与开源社区就是纯粹的个人行为,这跟工作时间完成工作又有什么冲突的呢?
对于最后这一点稍作解释。软件开发不是割裂的,不是说你精力投入在公司工作中,就对开源社区的贡献一无所用,也不是说精力投入在社区工作中,就必然影响公司工作。关于后者,下面我会讨论开源之风给黑客带来的影响,关于前者,这很显然。开源社区大多围绕开源软件而展开,软件开发是共通的,开源软件也只有能够很好的解决业界的问题才有扩大其影响面的机会。工作中遇到的问题可以成为开源软件功能扩展的方向,工作中归纳的方法可以成为开源软件优化的方案,工作中积累的经验当然可以在开源软件的开发中迁移和演绎。

聊完这些,我们再看看本文的标题,即开源社区给黑客带来了什么?标题我想了很久,称呼码农或者程序员,总有种把自己约束在职位上的不爽快感;称呼开发者,又跟开源社区叠字。还是用黑客最爽快,虽然黑客在时代的流变下有 cracker 的别指,但是秉承《黑客与画家》以及《大教堂与集市》的用法,黑客( hacker )还是指热爱并精通程序设计的人。
开源软件的解释与布道近来在国内也是甚嚣尘上( exactly )。我无意于代表某种严谨的定义,也没想着坐而论道。只是作为一个实际的一线开发人员,分享我所看到、体会到的东西。
开源社区的冲击或者说工程师的开源文化,在开发者的圈子里至少带来了良好的流程规范、优秀的代码参考以及广泛的自由信念。
良好的流程规范说的是开源社区的代码开发规范、代码评审规范、提议发起和投票规范以及软件发布规范。这在某些方面是因为社区更有可能由优秀的技术人员主导,而不是公司利益所驱动。不少社区的束缚更少,更愿意尝试新的流程和规范。这使得一线开发人员观察和总结出来的经验有了实验的场所,并最终在得到验证后在公司业务的研发上落实。好的流程和规范能够改善开发者的工作体验,这一点应当毋庸置疑。
其实,软件行业不过是一个出现还不超过百年的新兴行业,如今却要和机械、土木这种数百年的传统行业一起成为工业时代的支柱。这个行业本身尚待总结和验证的经验有太多太多,而开源社区作为一块创新的试验田,倾向于更信任的、更简洁的流程规范,无疑是软件行业向更人性化、更公平化发展的好趋势。
这些年来,删除无用代码、采用版本管理,强制代码评审、完善单元测试,重视技术方案、推广敏捷开发,实践小步快跑、落地持续集成,这些现在已经成为业内共识的规范,很有许多是从 Linux、Apache、Perl 以及其他开源社区所尝试和流传开来的。谁又能说现在的开发者没有享受到开源社区的发展带来的好处呢?
优秀的代码参考无需多言。这是一个很明显的现象,如果你的代码会被别人看到、会被别人评审,更直接的说,垃圾代码的合并请求会被否决、垃圾代码的作者会被议论,那么开发者对自己的代码质量就会有更高的自我要求。同时,垃圾代码也能够被社区中的贡献者所修正。
虽然我经常调侃 Flink 的代码,但是过度的面向对象和异步化代码确实在我需要这方面的帮助的时候提供了典型且有效的指导。另外诸如 Spark 和 Etcd 也是各自领域以及语言的代表作,以至于有段时间人们提起 Scala 会跟 Spark 混淆起来,而 Etcd 则是了解 Go 语言程序设计的比复杂的 Kubernetes/Docker 更亲民的实例。
从开源软件的代码中学习设计模式,归纳普遍问题的一般解法,对自己代码水平的精进显然是大有裨益。在业务开发中我们总是很容易重复发明解决方案。重复造轮子的坏处从公司利益角度来看主要并不在于浪费时间,反正都是在预定时间内完成工作,而是解决方案通常是需要长期完善的。不使用已有的成熟方案,反而靠自己拍脑袋瞎想,很多时候是在给自己埋坑。开源社区有的是成熟的解决方案,即使解决方案存在缺陷,那也更有可能被社区成员反馈。已知的问题总不比未知深坑可怕。
最后也是我最钟情于这个行业的一点,就是开源社区的运作方式所表达出来的广泛的自由信念。
曾几何时,我们自然地以为华贵的服饰和稀有的食材只有特权阶级才能享受的起,工匠和学者只把自己的经验学识由血缘或师徒纽带传承,甚至还要留一手。但是随着时代的发展,如诗中所言【旧时王谢堂前燕,飞入寻常百姓家】,我们已经进入到了一个文明高度发展,自由和平等被高度重视的时代。软件的未来,必定不是某家公司所垄断的命运。
开源软件在中国的发展很快遇到了抄袭、滥用的问题,但是正如书影音作品在版权保护之下自由流通一样,开源软件在中国或者任何地方,都将在软件协议的保护下自由的分发。软件作为后工业时代的核心生产力,绝对不会也不应该成为私有物品,所有的人都应该平等的享受软件行业高速发展带来的红利。开源社区的蓬勃发展,证明了自由将赋予软件更旺盛的生命力。
软件自由流通的实现,不应该像普罗米修斯盗火一样伴随着巨大的牺牲,而应该在工程师的开源文化潜移默化当中成为共识。我们开发软件,是为了改善人的生活,为了社会的发展。软件开发的经验和结果,自然应该自由地流通在社会上。





开源社简介


开源社是由国内外支持开源的企业,社区及个人,依“贡献,共识,共治”原则,所组织的厂商中立、纯志愿者、非营利的开源联盟,旨在共创健康可持续发展的开源生态体系,并推动中国开源社区成为全球开源软件的积极参与及贡献者。我们专注于开源治理、国际接轨、社区发展和开源项目。






相关阅读 | Related Reading


“请保持清醒:开源是和世界同步的绝佳机会!”


COSCon'20 讲师征集令


开源特训营 - Lesson 3 - 项目启动



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存